home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / Software / Servis / FFE / EXEC.SWG / 0012_Good Executables Reference.pas < prev    next >
Pascal/Delphi Source File  |  1997-05-11  |  33KB  |  797 lines

  1. { Old-style EXE header
  2. }
  3.   TExeHeader = record
  4.     Signature: Word;
  5.     LastCount: Word;
  6.     PageCount: Word;
  7.     ReloCount: Word;
  8.     eHdrSize:   Word;
  9.     eMinAbove:  Word;
  10.     eMaxAbove:  Word;
  11.     eInitSS:    Word;
  12.     eInitSP:    Word;
  13.     eCheckSum:  Word;
  14.     eInitPC:    Word;
  15.     eInitCS:    Word;
  16.     eRelocOfs:  Word;
  17.     eOvlyNum:   Word;
  18.     eRelocTab:  Word;
  19.     eSpace:     array[1..30] of Byte;
  20.     eNewHeader: Word;
  21.   end;
  22.  
  23. { New-Style EXE header
  24. }
  25.   TWinHeader = record
  26.     Signature: Word;
  27.     LinkerVer: Word;
  28.     EntryOffs: Word;
  29.     EntrySize: Word;
  30.     ReservedA: array[0..3] of Byte;
  31.     LinkerFlags: Word;
  32.     nDataSeg: Word;
  33.     LocalHeapSize: Word;
  34.     StackSize: Word;
  35.     CSIP: pointer;
  36.     SSSP: pointer;
  37.     nSegEntries: Word;
  38.     nModRefEntries: Word;
  39.     nNonResNameBytes: Word;
  40.     SegTbl: Word;            { offsets from Win header }
  41.     ResourceTbl: Word;
  42.     ResNameTbl: Word;
  43.     ModRefTbl: Word;
  44.     ImpNameTbl: Word;
  45.     NonResNameTbl: LongInt;        { offset from top }
  46.     nMovableEntryPoints: Word;
  47.     ShiftCount: Word;
  48.     nResourceSegs: Word;
  49.     OS: Byte;
  50.     Extra: Byte;
  51.     ReservedB: array[0..7] of Byte;
  52.   End;
  53.  
  54. Format of EXEC parameter block for AL=00h,01h,04h:
  55. Offset  Size    Description     (Table 0897)
  56.  00h    WORD    segment of environment to copy for child process (copy caller's
  57.                   environment if 0000h)
  58.  02h    DWORD   pointer to command tail to be copied into child's PSP
  59.  06h    DWORD   pointer to first FCB to be copied into child's PSP
  60.  0Ah    DWORD   pointer to second FCB to be copied into child's PSP
  61.  0Eh    DWORD   (AL=01h) will hold subprogram's initial SS:SP on return
  62.  12h    DWORD   (AL=01h) will hold entry point (CS:IP) on return
  63. SeeAlso: #0898,#0899
  64.  
  65. Format of EXEC parameter block for AL=03h:
  66. Offset  Size    Description     (Table 0898)
  67.  00h    WORD    segment at which to load overlay
  68.  02h    WORD    relocation factor to apply to overlay if in .EXE format
  69. SeeAlso: #0897,#0899
  70.  
  71. Format of EXEC parameter block for FlashTek X-32:
  72. Offset  Size    Description     (Table 0899)
  73.  00h    PWORD   48-bit far pointer to environment string
  74.  06h    PWORD   48-bit far pointer to command tail string
  75. SeeAlso: #0897,#0898
  76.  
  77. (Table 0900)
  78. Values for the executable types understood by various environments:
  79.  MZ     old-style DOS executable (see #0901)
  80.  NE     Windows or OS/2 1.x segmented ("new") executable (see #0903)
  81.  LE     Windows virtual device driver (VxD) linear executable (see #0916)
  82.  LX     variant of LE used in OS/2 2.x (see #0916)
  83.  W3     Windows WIN386.EXE file; a collection of LE files
  84.  PE     Win32 (Windows NT and Win32s) portable executable based on Unix COFF
  85.  DL     HP 100LX/200LX system manager compliant executable (.EXM)
  86.  MP     old PharLap .EXP (see #0926)
  87.  P2     PharLap 286 .EXP (see #0927)
  88.  P3     PharLap 386 .EXP (see #0927)
  89.  
  90. Format of .EXE file header:
  91. Offset  Size    Description     (Table 0901)
  92.  00h  2 BYTEs   .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
  93.                   (see also #0900)
  94.  02h    WORD    number of bytes in last 512-byte page of executable
  95.  04h    WORD    total number of 512-byte pages in executable (includes any
  96.                 partial last page)
  97.  06h    WORD    number of relocation entries
  98.  08h    WORD    header size in paragraphs
  99.  0Ah    WORD    minimum paragraphs of memory required to allocate in addition
  100.                   to executable's size
  101.  0Ch    WORD    maximum paragraphs to allocate in addition to executable's size
  102.  0Eh    WORD    initial SS relative to start of executable
  103.  10h    WORD    initial SP
  104.  12h    WORD    checksum (one's complement of sum of all words in executable)
  105.  14h    DWORD   initial CS:IP relative to start of executable
  106.  18h    WORD    offset within header of relocation table
  107.                 40h or greater for new-format (NE,LE,LX,W3,PE,etc.) executable
  108.  1Ah    WORD    overlay number (normally 0000h = main program)
  109. ---new executable---
  110.  1Ch  4 BYTEs   ???
  111.  20h    WORD    behavior bits
  112.  22h 26 BYTEs   reserved for additional behavior info
  113.  3Ch    DWORD   offset of new executable (NE,LE,etc) header within disk file,
  114.                 or 00000000h if plain MZ executable
  115. ---Borland TLINK---
  116.  1Ch  2 BYTEs   ??? (apparently always 01h 00h)
  117.  1Eh    BYTE    signature FBh
  118.  1Fh    BYTE    TLINK version (major in high nybble, minor in low nybble)
  119.  20h  2 BYTEs   ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h)
  120. ---ARJ self-extracting archive---
  121.  1Ch  4 BYTEs   signature "RJSX" (older versions, new signature is "aRJsfX" in
  122.                 the first 1000 bytes of the file)
  123. ---LZEXE 0.90 compressed executable---
  124.  1Ch  4 BYTEs   signature "LZ09"
  125. ---LZEXE 0.91 compressed executable---
  126.  1Ch  4 BYTEs   signature "LZ91"
  127. ---PKLITE compressed executable---
  128.  1Ch    BYTE    minor version number
  129.  1Dh    BYTE    bits 0-3: major version
  130.                 bit 4: extra compression
  131.                 bit 5: huge (multi-segment) file
  132.  1Eh  6 BYTEs   signature "PKLITE" (followed by copyright message)
  133. ---LHarc 1.x self-extracting archive---
  134.  1Ch  4 BYTEs   unused???
  135.  20h  3 BYTEs   jump to start of extraction code
  136.  23h  2 BYTEs   ???
  137.  25h 12 BYTEs   signature "LHarc's SFX "
  138. ---LHA 2.x self-extracting archive---
  139.  1Ch  8 BYTEs   ???
  140.  24h 10 BYTEs   signature "LHa's SFX " (v2.10) or "LHA's SFX " (v2.13)
  141. ---TopSpeed C 3.0 CRUNCH compressed file---
  142.  1Ch    DWORD   018A0001h
  143.  20h    WORD    1565h
  144. ---PKARCK 3.5 self-extracting archive---
  145.  1Ch    DWORD   00020001h
  146.  20h    WORD    0700h
  147. ---BSA (Soviet archiver) self-extracting archive---
  148.  1Ch    WORD    000Fh
  149.  1Eh    BYTE    A7h
  150. ---LARC self-extracting archive---
  151.  1Ch  4 BYTEs   ???
  152.  20h 11 BYTEs   "SFX by LARC "
  153. ---LH self-extracting archive---
  154.  1Ch  8 BYTEs   ???
  155.  24h  8 BYTEs   "LH's SFX "
  156. ---other linkers---
  157.  1Ch    var     optional information
  158. ---
  159.   N   N DWORDs  relocation items
  160. Notes:  if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
  161.           versions of the MS linker set it that way
  162.         if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
  163.           program is loaded as high in memory as possible (DOS only checks
  164.           the maximum allocation, however)
  165.         the maximum allocation is set to FFFFh by default
  166.         additional data may be contained in the file beyond the end of the
  167.           load image described by the .EXE header; this data may be overlays,
  168.           the actual executable for newer-format executables, or debugging
  169.           information (see #0907,#0931)
  170. SeeAlso: #0903
  171.  
  172. Format of ROM Module Header:
  173. Offset  Size    Description     (Table 0902)
  174.  00h  2 BYTEs   ROM signature 55h, AAh
  175.  02h    BYTE    size of ROM in 512-byte blocks
  176.  03h  3 BYTEs   POST initialization entry point (near JMP instruction)
  177.  06h    ROM Program Name List [array]
  178.         Offset  Size    Description
  179.          00h    BYTE    length of ROM program's name (00h if end of name list)
  180.          01h  N BYTEs   program name
  181.          N+1  3 BYTEs   program entry point (near JMP instruction)
  182.  
  183. Format of new executable header:
  184. Offset  Size    Description     (Table 0903)
  185.  00h  2 BYTEs   "NE" (4Eh 45h) signature
  186.  02h  2 BYTEs   linker version (major, then minor)
  187.  04h    WORD    offset from start of this header to entry table (see #0910)
  188.  06h    WORD    length of entry table in bytes
  189.  08h    DWORD   file load CRC (0 in Borland's TPW)
  190.  0Ch    BYTE    program flags (see #0904)
  191.  0Dh    BYTE    application flags (see #0905)
  192.  0Eh    WORD    auto data segment index
  193.  10h    WORD    initial local heap size
  194.  12h    WORD    initial stack size (added to data seg, 0000h if SS <> DS)
  195.  14h    DWORD   program entry point (CS:IP), "CS" is index into segment table
  196.  18h    DWORD   initial stack pointer (SS:SP), "SS" is segment index
  197.                 if SS=automatic data segment and SP=0000h, the stack pointer is
  198.                   set to the top of the automatic data segment, just below the
  199.                   local heap
  200.  1Ch    WORD    segment count
  201.  1Eh    WORD    module reference count
  202.  20h    WORD    length of nonresident names table in bytes
  203.  22h    WORD    offset from start of this header to segment table (see #0908)
  204.  24h    WORD    offset from start of this header to resource table
  205.  26h    WORD    offset from start of this header to resident names table
  206.  28h    WORD    offset from start of this header to module reference table
  207.  2Ah    WORD    offset from start of this header to imported names table
  208.                 (array of counted strings, terminated with a string of length
  209.                   00h)
  210.  2Ch    DWORD   offset from start of file to nonresident names table
  211.  30h    WORD    count of moveable entry point listed in entry table
  212.  32h    WORD    file alignment size shift count
  213.                 0 is equivalent to 9 (default 512-byte pages)
  214.  34h    WORD    number of resource table entries
  215.  36h    BYTE    target operating system
  216.                 00h unknown
  217.                 01h OS/2
  218.                 02h Windows
  219.                 03h European MS-DOS 4.x
  220.                 04h Windows 386
  221.                 05h BOSS (Borland Operating System Services)
  222.                 81h PharLap 286|DOS-Extender, OS/2
  223.                 82h PharLap 286|DOS-Extender, Windows
  224.  37h    BYTE    other EXE flags (see #0906)
  225.  38h    WORD    offset to return thunks or start of gangload area
  226.  3Ah    WORD    offset to segment reference thunks or length of gangload area
  227.  3Ch    WORD    minimum code swap area size
  228.  3Eh  2 BYTEs   expected Windows version (minor version first)
  229. Note:   this header is documented in detail in the Windows 3.1 SDK Programmer's
  230.           Reference, Vol 4.
  231. SeeAlso: #0901
  232.  
  233. Bitfields for new executable program flags:
  234. Bit(s)  Description     (Table 0904)
  235.  0-1    DGROUP type
  236.           0 = none
  237.           1 = single shared
  238.           2 = multiple (unshared)
  239.           3 = (null)
  240.  2      global initialization
  241.  3      protected mode only
  242.  4      8086 instructions
  243.  5      80286 instructions
  244.  6      80386 instructions
  245.  7      80x87 instructions
  246.  
  247. Bitfields for new executable application flags:
  248. Bit(s)  Description     (Table 0905)
  249.  0-2    application type
  250.         001 full screen (not aware of Windows/P.M. API)
  251.         010 compatible with Windows/P.M. API
  252.         011 uses Windows/P.M. API
  253.  3      is a Family Application (OS/2)
  254.  5      0=executable, 1=errors in image
  255.  6      non-conforming program (valid stack is not maintained)
  256.  7      DLL or driver rather than application
  257.         (SS:SP info invalid, CS:IP points at FAR init routine called with
  258.           AX=module handle which returns AX=0000h on failure, AX nonzero on
  259.           successful initialization)
  260.  
  261. Bitfields for other new .EXE flags:
  262. Bit(s)  Description     (Table 0906)
  263.  0      supports long filenames
  264.  1      2.X protected mode
  265.  2      2.X proportional font
  266.  3      gangload area
  267.  
  268. Format of Codeview trailer (at end of executable):
  269. Offset  Size    Description     (Table 0907)
  270.  00h    WORD    signature 4E42h ('NB')
  271.  02h    WORD    Microsoft debug info version number
  272.  04h    DWORD   Codeview header offset
  273. SeeAlso: #0931
  274.  
  275. Format of new executable segment table record:
  276. Offset  Size    Description     (Table 0908)
  277.  00h    WORD    offset in file (shift left by alignment shift to get byte offs)
  278.  02h    WORD    length of image in file (0000h = 64K)
  279.  04h    WORD    segment attributes (see #0909)
  280.  06h    WORD    number of bytes to allocate for segment (0000h = 64K)
  281. Note:   the first segment table entry is entry number 1
  282. SeeAlso: #0911
  283.  
  284. Bitfields for segment attributes:
  285. Bit(s)  Description     (Table 0909)
  286.  0      data segment rather than code segment
  287.  1      unused???
  288.  2      real mode
  289.  3      iterated
  290.  4      movable
  291.  5      sharable
  292.  6      preloaded rather than demand-loaded
  293.  7      execute-only (code) or read-only (data)
  294.  8      relocations (directly following code for this segment)
  295.  9      debug info present
  296.  10,11  80286 DPL bits
  297.  12     discardable
  298.  13-15  discard priority
  299.  
  300. Format of new executable entry table item (list):
  301. Offset  Size    Description     (Table 0910)
  302.  00h    BYTE    number of entry points (00h if end of entry table list)
  303.  01h    BYTE    segment number (00h if end of entry table list)
  304.  02h 3N BYTEs   entry records
  305.                 Offset  Size    Description
  306.                  00h    BYTE    flags
  307.                                 bit 0: exported
  308.                                 bit 1: single data
  309.                                 bits 2-7: unused???
  310.                  01h    WORD    offset within segment
  311.  
  312. Format of new executable relocation data (immediately follows segment image):
  313. Offset  Size    Description     (Table 0911)
  314.  00h    WORD    number of relocation items
  315.  02h 8N BYTEs   relocation items
  316.                 Offset  Size    Description
  317.                  00h    BYTE    relocation type
  318.                                 00h LOBYTE
  319.                                 02h BASE
  320.                                 03h PTR
  321.                                 05h OFFS
  322.                                 0Bh PTR48
  323.                                 0Dh OFFS32
  324.                  01h    BYTE    flags
  325.                                 bit 2: additive
  326.                  02h    WORD    offset within segment
  327.                  04h    WORD    target address segment
  328.                  06h    WORD    target address offset
  329. SeeAlso: #0908,#0912
  330.  
  331. Format of new executable resource data:
  332. Offset  Size    Description     (Table 0912)
  333.  00h    WORD    alignment shift count for resource data
  334.  02h  N RECORDs resources
  335.         Format of resource record:
  336.         Offset  Size    Description
  337.          00h    WORD    type ID
  338.                         0000h if end of resource records
  339.                         >= 8000h if integer type
  340.                         else offset from start of resource table to type string
  341.          02h    WORD    number of resources of this type
  342.          04h    DWORD   reserved for runtime use
  343.          08h  N Resources (see #0913)
  344. Note:   resource type and name strings are stored immediately following the
  345.           resource table, and are not null-terminated
  346. SeeAlso: #0913
  347.  
  348. Format of new executable resource entry:
  349. Offset  Size    Description     (Table 0913)
  350.  00h    WORD    offset in alignment units from start of file to contents of
  351.                 the resource data
  352.  02h    WORD    length of resource image in bytes
  353.  04h    WORD    flags
  354.                 bit 4: moveable
  355.                 bit 5: shareable
  356.                 bit 6: preloaded
  357.  06h    WORD    resource ID
  358.                 >= 8000h if integer resource
  359.                 else offset from start of resource table to resource string
  360.  08h    DWORD   reserved for runtime use
  361. Notes:  resource type and name strings are stored immediately following the
  362.           resource table, and are not null-terminated
  363.         strings are counted strings, with a string of length 0 indicating the
  364.           end of the resource table
  365. SeeAlso: #0912,#0914
  366.  
  367. Format of new executable module reference table [one bundle of entries]:
  368. Offset  Size    Description     (Table 0914)
  369.  00h    BYTE    number of records in this bundle (00h if end of table)
  370.  01h    BYTE    segment indicator
  371.                 00h unused
  372.                 FFh movable segment, segment number is in entry
  373.                 else segment number of fixed segment
  374.  02h  N RECORDs
  375.         Format of segment record
  376.         Offset  Size    Description
  377.          00h    BYTE    flags
  378.                         bit 0: entry is exported
  379.                         bit 1: entry uses global (shared) data
  380.                         bits 7-3: number of parameter words
  381.         ---fixed segment---
  382.          01h    WORD    offset
  383.         ---moveable segment---
  384.          01h  2 BYTEs   INT 3F instruction (CDh 3Fh)
  385.          03h    BYTE    segment number
  386.          05h    WORD    offset
  387. Note:   table entries are numbered starting from 1
  388. SeeAlso: #0915
  389.  
  390. Format of new executable resident/nonresident name table entry:
  391. Offset  Size    Description     (Table 0915)
  392.  00h    BYTE    length of string (00h if end of table)
  393.  01h  N BYTEs   ASCII text of string
  394.  N+1    WORD    ordinal number (index into entry table)
  395. Notes:  the first string in the resident name table is the module name; the
  396.           first entry in the nonresident name table is the module description
  397.         the strings are case-sensitive; if the executable was linked with
  398.           /IGNORECASE, all strings are in uppercase
  399. SeeAlso: #0914
  400.  
  401. Format of Linear Executable (enhanced mode executable) header:
  402. Offset  Size    Description     (Table 0916)
  403.  00h  2 BYTEs   "LE" (4Ch 45h) signature (Windows)
  404.                 "LX" (4Ch 58h) signature (OS/2)
  405.  02h    BYTE    byte order (00h = little-endian, nonzero = big-endian)
  406.  03h    BYTE    word order (00h = little-endian, nonzero = big-endian)
  407.  04h    DWORD   executable format level
  408.  08h    WORD    CPU type (see also INT 15/AH=C9h)
  409.                 01h Intel 80286 or upwardly compatible
  410.                 02h Intel 80386 or upwardly compatible
  411.                 03h Intel 80486 or upwardly compatible
  412.                 04h Intel Pentium (80586) or upwardly compatible
  413.                 20h Intel i860 (N10) or compatible
  414.                 21h Intel "N11" or compatible
  415.                 40h MIPS Mark I (R2000, R3000) or compatible
  416.                 41h MIPS Mark II (R6000) or compatible
  417.                 42h MIPS Mark III (R4000) or compatible
  418.  0Ah    WORD    target operating system
  419.                 01h OS/2
  420.                 02h Windows
  421.                 03h European DOS 4.0
  422.                 04h Windows 386
  423.  0Ch    DWORD   module version
  424.  10h    DWORD   module type (see #0917)
  425.  14h    DWORD   number of memory pages
  426.  18h    Initial CS:EIP
  427.         DWORD   object number
  428.         DWORD   offset
  429.  20h    Initial SS:ESP
  430.         DWORD   object number
  431.         DWORD   offset
  432.  28h    DWORD   memory page size
  433.  2Ch    DWORD   (Windows LE) bytes on last page
  434.                 (OS/2 LX) page offset shift count
  435.  30h    DWORD   fixup section size
  436.  34h    DWORD   fixup section checksum
  437.  38h    DWORD   loader section size
  438.  3Ch    DWORD   loader section checksum
  439.  40h    DWORD   offset of object table (see #0918)
  440.  44h    DWORD   object table entries
  441.  48h    DWORD   object page map table offset (see #0920)
  442.  4Ch    DWORD   object iterate data map offset
  443.  50h    DWORD   resource table offset
  444.  54h    DWORD   resource table entries
  445.  58h    DWORD   resident names table offset (see #0921)
  446.  5Ch    DWORD   entry table offset (see #0922,#0923)
  447.  60h    DWORD   module directives table offset
  448.  64h    DWORD   Module Directives entries
  449.  68h    DWORD   Fixup page table offset
  450.  6Ch    DWORD   Fixup record table offset (see #0925)
  451.  70h    DWORD   imported modules name table offset
  452.  74h    DWORD   imported modules count
  453.  78h    DWORD   imported procedures name table offset
  454.  7Ch    DWORD   per-page checksum table offset
  455.  80h    DWORD   data pages offset
  456.  84h    DWORD   preload page count
  457.  88h    DWORD   non-resident names table offset
  458.  8Ch    DWORD   non-resident names table length
  459.  90h    DWORD   non-resident names checksum
  460.  94h    DWORD   automatic data object
  461.  98h    DWORD   debug information offset
  462.  9Ch    DWORD   debug information length
  463.  A0h    DWORD   preload instance pages number
  464.  A4h    DWORD   demand instance pages number
  465.  A8h    DWORD   extra heap allocation
  466.  ACh 12 BYTEs   reserved
  467.  B8h    DWORD   offset of VERSIONINFO resource (MS-Windows VxD only)
  468.  BCh    DWORD   pointer to ??? (dynamically-loadable VxDs only???)
  469.  C0h    WORD    device ID (MS-Windows VxD only)
  470.  C2h    WORD    DDK version (MS-Windows VxD only)
  471. Note:   used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers
  472.  
  473. Bitfields for Linear Executable module type:
  474. Bit(s)  Description     (Table 0917)
  475.  2      initialization (only for DLLs) 0 = global, 1 = per-process
  476.  4      no internal fixups in executable image
  477.  5      no external fixups in executable image
  478.  8-10   API compatibility
  479.         0 = unknown
  480.         1 = incompatible with PM windowing \
  481.         2 = compatible with PM windowing    > (only for
  482.         3 = uses PM windowing API          /    programs)
  483.  13     module not loadable (only for programs)
  484.  15-17  module type
  485.         000 program
  486.         001 library (DLL)
  487.         011 protected memory library module
  488.         100 physical device driver
  489.         110 virtual device driver
  490.  30     per-process library termination
  491.         (requires valid CS:EIP, can't be set for .EXE)
  492.  
  493. Format of object table entry:
  494. Offset  Size    Description     (Table 0918)
  495.  00h    DWORD   virtual size in bytes
  496.  04h    DWORD   relocation base address
  497.  08h    DWORD   object flags (see #0919)
  498.  0Ch    DWORD   page map index
  499.  10h    DWORD   page map entries (see #0920)
  500.  14h  4 BYTEs   reserved??? (apparently always zeros)
  501.  
  502. Bitfields for object flags:
  503. Bit(s)  Description     (Table 0919)
  504.  0      readable
  505.  1      writable
  506.  2      executable
  507.  3      resource
  508.  4      discardable
  509.  5      shared
  510.  6      preloaded
  511.  7      invalid
  512.  8-9    type
  513.         00 normal
  514.         01 zero-filled
  515.         10 resident
  516.         11 resident and contiguous
  517.  10     resident and long-lockable
  518.  11     reserved
  519.  12     16:16 alias required
  520.  13     "BIG" (Huge: 32-bit)
  521.  14     conforming
  522.  15     "OBJECT_I/O_PRIVILEGE_LEVEL"
  523.  16-31  reserved
  524.  
  525. Format of object page map table entry:
  526. Offset  Size    Description     (Table 0920)
  527.  00h    BYTE    ??? (usually 00h)
  528.  01h    WORD    (big-endian) index to fixup table
  529.                 0000h if no relocation info
  530.  03h    BYTE    type (00h hard copy in file, 03h some relocation needed)
  531.  
  532. Format of resident names table entry:
  533. Offset  Size    Description     (Table 0921)
  534.  00h    BYTE    length of name
  535.  01h  N BYTEs   name
  536.  N+1  3 BYTEs   ???
  537.  
  538. Format of LE linear executable entry table:
  539. Offset  Size    Description     (Table 0922)
  540.  00h    BYTE    number of entries in table
  541.  01h 10 BYTEs per entry
  542.                 Offset  Size    Description
  543.                  00h    BYTE    bit flags
  544.                                 bit 0: non-empty bundle
  545.                                 bit 1: 32-bit entry
  546.                  01h    WORD    object number
  547.                  03h    BYTE    entry type flags
  548.                                 bit 0: exported
  549.                                 bit 1: uses single data rather than instance
  550.                                 bit 2: reserved
  551.                                 bits 3-7: number of stack parameters
  552.                  04h    DWORD   offset of entry point
  553.                  08h  2 BYTEs   ???
  554. Note:   empty bundles (bit flags at 00h = 00h) are used to skip unused indices,
  555.           and do not contain the remaining nine bytes
  556.  
  557. Format of LX linear executable entry table [array]:
  558. Offset  Size    Description     (Table 0923)
  559.  00h    BYTE    number of bundles following (00h = end of entry table)
  560.  01h    BYTE    bundle type
  561.                 00h empty
  562.                 01h 16-bit entry
  563.                 02h 286 callgate entry
  564.                 03h 32-bit entry
  565.                 04h forwarder entry
  566.                 bit 7 set if additional parameter typing information is present
  567. ---bundle type 00h---
  568.  no additional fields
  569. ---bundle type 01h---
  570.  02h    WORD    object number
  571.  04h    BYTE    entry flags
  572.                 bit 0: exported
  573.                 bits 7-3: number of stack parameters
  574.  05h    WORD    offset of entry point in object (shifted by page size shift)
  575. ---bundle type 02h---
  576.  02h    WORD    object number
  577.  04h    BYTE    entry flags
  578.                 bit 0: exported
  579.                 bits 7-3: number of stack parameters
  580.  05h    WORD    offset of entry point in object
  581.  07h    WORD    reserved for callgate selector (used by loader)
  582. ---bundle type 03h---
  583.  02h    WORD    object number
  584.  04h    BYTE    entry flags
  585.                 bit 0: exported
  586.                 bits 7-3: number of stack parameters
  587.  05h    DWORD   offset of entry point in object
  588. ---bundle type 04h---
  589.  02h    WORD    reserved
  590.  04h    BYTE    forwarder flags
  591.                 bit 0: import by ordinal
  592.                 bits 7-1 reserved
  593.  05h    WORD    module ordinal
  594.                 (forwarder's index into Import Module Name table)
  595.  07h    DWORD   procedure name offset or import ordinal number
  596. Note:   all fields after the first two bytes are repeated N times
  597.  
  598. Bitfields for linear executable fixup type:
  599. Bit(s)  Description     (Table 0924)
  600.  7      ordinal is BYTE rather than WORD
  601.  6      16-rather than 8-object number/module ordinal
  602.  5      addition with DWORD rather than WORD
  603.  4      relocation info has size with new two bytes at end
  604.  3      reserved (0)
  605.  2      set if add to destination, clear to replace destination
  606.  1-0    type
  607.         00 internal fixup
  608.         01 external fixup, imported by ordinal
  609.         10 external fixup, imported by name
  610.         11 internal fixup via entry table
  611.  
  612. Format of linear executable fixup record:
  613. Offset  Size    Description     (Table 0925)
  614.  00h    BYTE    type
  615.                 bits 7-4: modifier (0001 single, 0011 multiple)
  616.                 bits 3-0: type
  617.                         0000 byte offset
  618.                         0010 word segment
  619.                         0011 16-bit far pointer (DWORD)
  620.                         0101 16-bit offset
  621.                         0110 32-bit far pointer (PWORD)
  622.                         0111 32-bit offset
  623.                         1000 near call or jump, WORD/DWORD based on seg attrib
  624.  01h    BYTE    linear executable fixup type (see #0924)
  625. ---if single type---
  626.  02h    WORD    offset within page
  627.  04h    relocation information
  628.         ---internal fixup---
  629.         BYTE    object number
  630.         ---external,ordinal---
  631.         BYTE    one-based module number in Import Module table
  632.         BYTE/WORD ordinal number
  633.         WORD/DWORD value to add (only present if modifier bit 4 set)
  634.         ---external,name---
  635.         BYTE    one-based module number in Import Module table
  636.         WORD    offset in Import Procedure names
  637.         WORD/DWORD value to add (only present if modifier bit 4 set)
  638. ---if multiple type---
  639.  02h    BYTE    number of items
  640.  03h    var     relocation info as for "single" type (see above)
  641.       N WORDs   offsets of items to relocate
  642.  
  643. Format of old Phar Lap .EXP file header:
  644. Offset  Size    Description     (Table 0926)
  645.  00h  2 BYTEs   "MP" (4Dh 50h) signature
  646.  02h    WORD    remainder of image size / page size (page size = 512h)
  647.  04h    WORD    size of image in pages
  648.  06h    WORD    number of relocation items
  649.  08h    WORD    header size in paragraphs
  650.  0Ah    WORD    minimum number of extra 4K pages to be allocated at the end
  651.                   of program, when it is loaded
  652.  0Ch    WORD    maximum number of extra 4K pages to be allocated at the end
  653.                   of program, when it is loaded
  654.  0Eh    DWORD   initial ESP
  655.  12h    WORD    word checksum of file
  656.  14h    DWORD   initial EIP
  657.  18h    WORD    offset of first relocation item
  658.  1Ah    WORD    overlay number
  659.  1Ch    WORD    ??? (wants to be 1)
  660. SeeAlso: #0927
  661.  
  662. Format of new Phar Lap .EXP file header:
  663. Offset  Size    Description     (Table 0927)
  664.  00h  2 BYTEs   signature ("P2" for 286 .EXP executable, "P3" for 386 .EXP)
  665.  02h    WORD    level (01h flat-model file, 02h multisegmented file)
  666.  04h    WORD    header size
  667.  06h    DWORD   file size in bytes
  668.  0Ah    WORD    checksum
  669.  0Ch    DWORD   offset of run-time parameters within file (see #0929)
  670.  10h    DWORD   size of run-time parameters in bytes
  671.  14h    DWORD   offset of relocation table within file
  672.  18h    DWORD   size of relocation table in bytes
  673.  1Ch    DWORD   offset of segment information table within file (see #0928)
  674.  20h    DWORD   size of segment information table in bytes
  675.  24h    WORD    size of segment information table entry in bytes
  676.  26h    DWORD   offset of load image within file
  677.  2Ah    DWORD   size of load image on disk
  678.  2Eh    DWORD   offset of symbol table within file or 00000000h
  679.  32h    DWORD   size of symbol table in bytes
  680.  36h    DWORD   offset of GDT within load image
  681.  3Ah    DWORD   size of GDT in bytes
  682.  3Eh    DWORD   offset of LDT within load image
  683.  42h    DWORD   size of LDT in bytes
  684.  46h    DWORD   offset of IDT within load image
  685.  4Ah    DWORD   size of IDT in bytes
  686.  4Eh    DWORD   offset of TSS within load image
  687.  52h    DWORD   size of TSS in bytes
  688.  56h    DWORD   minimum number of extra bytes to be allocated at end of program
  689.                 (level 1 executables only)
  690.  5Ah    DWORD   maximum number of extra bytes to be allocated at end of program
  691.                 (level 1 executables only)
  692.  5Eh    DWORD   base load offset (level 1 executables only)
  693.  62h    DWORD   initial ESP
  694.  66h    WORD    initial SS
  695.  68h    DWORD   initial EIP
  696.  6Ch    WORD    initial CS
  697.  6Eh    WORD    initial LDT
  698.  70h    WORD    initial TSS
  699.  72h    WORD    flags
  700.                 bit 0: load image is packed
  701.                 bit 1: 32-bit checksum is present
  702.                 bits 4-2: type of relocation table
  703.  74h    DWORD   memory requirements for load image
  704.  78h    DWORD   32-bit checksum (optional)
  705.  7Ch    DWORD   size of stack segment in bytes
  706.  80h 256 BYTEs  reserved (0)
  707. SeeAlso: #0926,#0930
  708.  
  709. Format of Phar Lap segment information table entry:
  710. Offset  Size    Description     (Table 0928)
  711.  00h    WORD    selector number
  712.  02h    WORD    flags
  713.  04h    DWORD   base offset of selector
  714.  08h    DWORD   minimum number of extra bytes to be allocated to the segment
  715.  
  716. Format of 386|DOS-Extender run-time parameters:
  717. Offset  Size    Description     (Table 0929)
  718.  00h  2 BYTEs   signature "DX" (44h 58h)
  719.  02h    WORD    minimum number of real-mode params to leave free at run time
  720.  04h    WORD    maximum number of real-mode params to leave free at run time
  721.  06h    WORD    minimum interrupt buffer size in KB
  722.  08h    WORD    maximum interrupt buffer size in KB
  723.  0Ah    WORD    number of interrupt stacks
  724.  0Ch    WORD    size in KB of each interrupt stack
  725.  0Eh    DWORD   offset of byte past end of real-mode code and data
  726.  12h    WORD    size in KB of call buffers
  727.  14h    WORD    flags
  728.                 bit 0: file is virtual memory manager
  729.                 bit 1: file is a debugger
  730.  16h    WORD    unprivileged flag (if nonzero, executes at ring 1, 2, or 3)
  731.  18h 104 BYTEs  reserved (0)
  732.  
  733. Format of Phar Lap repeat block header:
  734. Offset  Size    Description     (Table 0930)
  735.  00h    WORD    byte count
  736.  02h    BYTE    repeat string length
  737.  
  738. Format of Borland debugging information header (following load image):
  739. Offset  Size    Description     (Table 0931)
  740.  00h    WORD    signature 52FBh
  741.  02h    WORD    version ID
  742.  04h    DWORD   size of name pool in bytes
  743.  08h    WORD    number of names in name pool
  744.  0Ah    WORD    number of type entries
  745.  0Ch    WORD    number of structure members
  746.  0Eh    WORD    number of symbols
  747.  10h    WORD    number of global symbols
  748.  12h    WORD    number of modules
  749.  14h    WORD    number of locals (optional)
  750.  16h    WORD    number of scopes in table
  751.  18h    WORD    number of line-number entries
  752.  1Ah    WORD    number of include files
  753.  1Ch    WORD    number of segment records
  754.  1Eh    WORD    number of segment/file correlations
  755.  20h    DWORD   size of load image after removing uninitialized data and debug
  756.                   information
  757.  24h    DWORD   debugger hook; pointer into debugged program whose meaning
  758.                   depends on program flags
  759.  28h    BYTE    program flags
  760.                 bit 0: case-sensitive link
  761.                 bit 1: pascal overlay program
  762.  29h    WORD    no longer used
  763.  2Bh    WORD    size of data pool in bytes
  764.  2Dh    BYTE    padding
  765.  2Eh    WORD    size of following header extension (currently 00h, 10h, or 20h)
  766.  30h    WORD    number of classes
  767.  32h    WORD    number of parents
  768.  34h    WORD    number of global classes (currently unused)
  769.  36h    WORD    number of overloads (currently unused)
  770.  38h    WORD    number of scope classes
  771.  3Ah    WORD    number of module classes
  772.  3Ch    WORD    number of coverage offsets
  773.  3Eh    DWORD   offset relative to symbol base of name pool
  774.  42h    WORD    number of browser information records
  775.  44h    WORD    number of optimized symbol records
  776.  46h    WORD    debugging flags
  777.  48h  8 BYTEs   padding
  778. Note:   additional information on the Borland debugging info may be found in
  779.           Borland's Open Architecture Handbook
  780. SeeAlso: #0907
  781.  
  782.                             \\\\\//
  783.                            @ 0   0 @
  784. <-------------------oOOO------(_)--------OOOo--------------------->
  785.                        dBsee Product Manager
  786.                            Matteo Baccan
  787.                       mailto:baccan@isanet.it
  788.                        mailto:guru@dbsee.com
  789.                       http://matteo.isanet.it
  790.  
  791.         Get a free copy of dBsee from http://www.dbsee.com
  792.  
  793.      Current releases : dBsee 4.5, dBsee ++ 5.04, dBsee400 4.5
  794.  
  795.            Current betas : dBsee ++ 6, dBsee400 ++
  796. <------------------------oooO----------Oooo----------------------->
  797.